home *** CD-ROM | disk | FTP | other *** search
-
- ===============================================
-
-
- @(#) OKAMI SHELL VERSION 1.5 - TIPS UND TRICKS
-
-
- ===============================================
- Stand: 19.9.1992
-
-
-
-
- BITTE ERST DIE DATEIEN README UND OKAMI.DOC LESEN!
-
- ----------------------------------------------------------------------------
-
-
-
- INHALT
-
-
- Profile
- Aufruf von Programmen
- Benutzung der Shell von Diskette aus
- Beispiel-Shellscripts
- okback.sh
- e.sh
- showpic.sh
- startprg.sh
- Shell-Funktionen
- Die gemexec-Funktion
- Die screensave-Funktion
- Speichern und Restaurieren der Shell-Einstellungen
- MS-DOS-Gefühle
- C-Shell-Gefühle
- Andere Shells: Gulam, Master und bash
- Die Versionsnummer der Shell
- Diverses
- Trikolor-Bildschirm
- Aufruf vom Desktop
- Uneindeutige Kommandonamen
- Compiler-Aufruf
- Ändern von Dateinamen-Extendern
- Programmierung des UPN-Rechners
-
- ----------------------------------------------------------------------------
-
-
-
- PROFILE
-
- Ich benutze das folgende Profile zum Konfigurieren der Shell.
-
- # Okami-Shell - System-Profile
-
-
- # Terminaleinstellung (für Termcap etc.)
- TERM=st
- # Cursor etwas schneller blinkend
- cursor +bv 12
- # Aktuelles Directory im Prompt anzeigen
- PS1=['$CWD'] ^^^$' '
- # Pipes auf die Ramdisk
- PIPDIR=M:\
- # Nach Ende der Shell CWD sichern...
- set +s
- # ...und den Cursor abschalten
- trap cursor -v
- # Directories trennen wie in Unix mit Slash
- set +b
- # anmelden als Applikation, sollte man immer machen
- gon
- # Word Wrap On
- echo ^033v
-
-
- # Bidschirm löschen durch viele Leerzeilen
- echo "^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n"
-
-
- # Einschaltmeldung
- echo
- echo Atari Mega-ST 4 ($TERM)
- # Versionsnummer der Shell, des TOS und von MiNT
- ver -otM
- echo
- # Ausgabe des Datums des letzten Logins
- cat lastlog 2>NULL:
- echo
- # Ausgabe des freien Speichers
- echo Free RAM: `mem` Bytes
- echo
- # Ausgabe in invertierter Schrift
- echo ^033pType help for command survey.^033q
- echo
- # Datum speichern
- echo Last Login: `date` >lastlog
- # Letztes CWD zurückholen
- cd `cat wdir`
-
-
- Laufwerk M ist eine Ramdisk, die die Aufgabe hat, die Pipe-Operationen
- zu beschleunigen. Dadurch, daß die Pipe auf die Ramdisk gelegt wird
- (PIPDIR=M:\), erfolgen alle Pipe-Operationen ohne Plattenzugriff.
- Durch die Einstellung "set +s" wird die Shell veranlaßt, vor dem Pro-
- grammende das aktuelle Verzeichnis in die Datei $HOME\wdir zu schreiben.
- Das Profile benutzt diese Datei, um das aktuelle Verzeichnis wieder auf
- den alten Wert einzustellen. So ist man nach dem Start der Shell immer
- in dem Verzeichnis, in dem man war, als man die Shell zuletzt verlassen
- hatte.
-
- Durch die Einstellung "set +x" werden in einer Eingabe alle Slashes (/)
- in Backslashes (\) umgeformt, wodurch man die Möglichkeit hat,
- Dateinamen wie in Unix einzugeben, also shell/bin/sh.ttp anstatt
- shell\bin\sh.ttp. Natürlich erzeugt dann das Kommando
- echo 6/3=2
- die Ausgabe
- 6\3=2
- , da alle Slashes umgeformt werden, aber das stört normalerweise nicht.
- (den UPN-Rechner stört es übrigens auch nicht, da er den Backslash als-
- Divisionszeichen versteht. Aus "upn 6 3 /" wird also "upn 6 3 \".)
- Außerdem kann man sich in Notfällen mit einfachen Anführungszeichen
- retten,
- echo '6/3=2'
- ergibt also immer
- 6/3=2
- .
-
- ----------------------------------------------------------------------------
-
-
-
- AUFRUF VON PROGRAMMEN
-
- (Der folgende Abschnitt ist im wesentlichen für Festplattenbenutzer von
- Interesse.)
-
- Viele Programme gehen davon aus, das sich gewisse Dateien wie z.B. RSCs
- im aktuellen Verzeichnis befinden. Um ein solches Kommando zu starten,
- muß man also mit cd in das jeweilige Verzeichnis wechseln, was unter
- Umständen einige Tipparbeit macht, vor allem bei einer Festplatte. Mit
- der Okami-Shell ist es möglich, Programme von überall, also von jedem
- beliebigen aktuellen Verzeichnis aus zu starten.
- Es sei z.B. GEMTEST.PRG ein Programm, das im Verzeichnis
- D:\PROG\GEMTEST steht und eine RSC-Datei aus dem aktuellen Verzeichnis
- nachladen muß.
- Zum Start des Programms müßte man also eingeben
-
- cd d:\prog\gemtest
- gemtest
-
- Man kann allerdings auch so vorgehen:
-
- Man erzeugt sich eine Datei namens GEMTEST.SH im Verzeichnis $HOME\bin,
- die ungefähr so aussieht:
-
- A=`set -`
- set +x
- d:\prog\gemtest.prg
- set $A
- unset A
-
- Zuerst wird die aktuelle Einstellung der Flags in der Shellvariablen A
- gespeichert, danach wird das Flag x aktiviert. Wenn dieses Flag
- aktiviert ist, führt die Shell vor dem Start eines Binärprogramms ein cd
- in das Directory aus, in dem sich das Programm befindet. Nach dem Ende
- des Programms wird das ursprüngliche Directory wieder restauriert.
- Danach wird das Programm gestartet.
- Nach Programmende werden die Shell-Flags werden auf den gespeicherten
- Wert zurückgesetzt. Danach wird die lokal verwendete Shellvariable A
- freigegeben.
-
- Wenn das Flag -x immer gesetzt ist, kann man denselben Effekt erreichen
- durch:
-
- hash gemtest d:/prg/gemtest/gemtest.prg
-
- Normalerweise ist das Flag x immer aktiviert. Programme, die sich in
- einem der in der Shellvariablen PATH gespeicherten Directories befinden,
- werden also immer korrekt gestartet, indem man nur ihren Namen eingibt.
-
- ----------------------------------------------------------------------------
-
-
-
- BENUTZUNG DER SHELL VON DISKETTE AUS
-
- Wenn möglich, sollte man die Shell auf einem schnellen Massespeicher
- wie Festplatte oder Ramdisk installieren. Wer die Shell hauptsächlich
- mit Disketten benutzt, ärgert sich vermutlich darüber, daß es ziemlich
- lange dauert, bis ein falsch eingetipptes Kommando als solches erkannt
- wird, da die Shell in allen möglichen Ordnern auf der Diskette nach
- einer passenden Datei sucht. Mit den folgenden Einstellungen im Profile
- kann die An- zahl dieser Suchoperationen minimiert werden:
-
- PATH=.,$HOME\bin
- CDPATH=.
-
- Wenn man den Programm-Suchpfad auf das aktuelle Directory abkürzt (mit
- der Einstellung "PATH=."), werden noch weniger Suchoperationen
- durchgeführt, man kann dann allerdings die mitgelieferten externen Kom-
- mandos, die sich in dem Directory $HOME\bin befinden sollten, nicht
- mehr von überallher durch den einfachen Kommandonamen aufrufen, sondern
- muß den ganzen Pfad angeben (z.B. nicht einfach "format", sondern
- "$HOME\bin\format.ttp").
-
- ----------------------------------------------------------------------------
-
-
-
- BEISPIEL-SHELLSCRIPTS
-
-
-
- 1) okback.sh
- Ich benutze das folgende Shellscript zum Sichern der Quelldateien der
- Shell auf Diskette. Es wird ein lzh-Archiv auf der Diskette angelegt, in
- das die seit dem letzten Backup geänderten Dateien hineingeschrieben
- werden.
-
- # Temporär-Directory
- DIR=M:/tmp/okbak
- # Liste der zu sichernden Dateien
- FILES=*.c *.h sh.prj doc/*.nr
-
-
- alert stop 1 "Bitte die Okami-Backup-^|Diskette einlegen." ^
- "Ok^|Abbruch" ERG
- if [ $ERG = 2 ]
- then
- exit
- fi
-
-
- # Temp-Dir anlegen und Archiv von der Diskette hineinkopieren
- mkdir -r $DIR/
- cp -v a:/okbak.lzh $DIR
-
-
- # geänderte Dateien ins Archiv einfügen.
- # lharc ist ein externes Kommando.
- lharc a -by $DIR/okbak.lzh $FILES
-
-
- # Archiv wieder auf Diskette speichern
- cp -v $DIR/okbak.lzh a:/
- # Log-Eintrag auf der Diskette erzeugen
- echo Okami-Source-Backup vom `date` >>a:/okbak.log
-
-
- # Temp-Directory entfernen
- rm -r $DIR
- unset DIR FILES ERG
-
-
-
- 2) e.sh
- Das Shellscript e.sh dient zum Aufruf des Editors. Das Editorprogramm
- befindet sich in der Datei $HOME\bin\editor.prg. Durch die Verwendung
- dieses Shellscripts ist es möglich, irgendwo im Dateisystem den Editor
- für irgendeine Datei aufzurufen.
-
- FILE=$*
- if [ -v FILE ]
- then
- FILE=$EFILE
- fi
- FILE=`fullname $FILE`
- $HOME/bin/editor.prg $FILE
- EFILE=$FILE
- unset FILE
-
- Der Name der zu editerenden Datei wird dem Script als Parameter
- übergeben.
- Die Zeile "FILE=`fullname $FILE`" erzeugt in der Variablen FILE den
- absoluten Dateinamen, der dem Editorprogramm als Parameter übergeben
- wird.
-
- Wenn dieses Script ohne Parameter aufgerufen wird, so wird der in der
- Shellvariablen EFILE gespeicherte Dateiname benutzt. In dieser Variablen
- wird nach jedem Editoraufruf der jeweilige Dateiname gespeichert, so daß
- man, wenn man dieselbe Datei mehrmals hintereinander editieren möchte,
- den Dateinamen nur einmal angeben muß:
-
- e datei.txt editieren von datei.txt
- e datei2.txt editieren von datei2.txt
- e ebenfalls datei2.txt
-
- Ggfs. muß man dieses Script noch erweitern, um dem Editor mehrere
- Parameter zu übergeben (für den Micro-Emacs z.B. den Namen der
- Konfigurationsdatei o.ä.).
-
-
- 3) showpic.sh
- Dieses Script zeigt, wie man die Shell programmieren kann. Es dient
- dazu, Bilddateien, die im Bitmap-Screenformat abgespeichert wurden
- (Dateilänge >32000 Bytes), zu laden und anzuzeigen. Es gehört zum
- Lieferumfang der Shell, die Bedienungsanleitung befindet sich in
- commands.doc.
-
-
- 4) startprg.sh
- Die Idee zu diesem Shellscript stammt von Thomas Behrens aus Eschweiler
- und lautet, ein Programm in einer Fileselectbox auszuwählen und dann zu
- starten. Dazu genügt eigentlich die folgende Zeile:
-
- fsel | xargs {}
-
- oder noch einfacher
-
- `fsel`
-
- , wenn man aber den Abbruch-Button der Box abtesten und dem Programm
- eine Parameterzeile übergeben will, sollte man folgendes Script
- benutzen:
-
- FILE=`fsel *.* "" KEY "Welches Programm ausführen?"`
- if [ $KEY = 1 ]
- then
- echo "Bitte Kommandozeile eingeben:"
- read CMD
- $FILE $CMD
- fi
- unset FILE KEY CMD
-
- Beide Lösungen funktionieren übrigens sowohl mit Binärprogrammen als
- auch mit Shellscripts.
-
- ---------------------------------------------------------------------------
-
-
-
- SHELL-FUNKTIONEN
-
- Natürlich sollte man alle häufig gebrauchten Shellscripts resident
- halten, und zwar als Shellfunktionen. Es ist möglich, ein Shellscript so
- zu schreiben, daß es sich beim ersten Aufruf selber als Funktion
- installiert; bei allen weiteren Aufrufen wird dann die Funktion benutzt.
-
-
- Sei z.B. folgendes Shellscript in der Datei hallo.sh, also unter dem
- Namen hallo aufzurufen:
-
- echo Hallo Anwender!
- echo Der freie Speicherplatz beträgt `mem` Bytes.
- echo Auf Platte C: sind `df -f c:` Bytes frei.
-
- Setzt man nun die Zeilen
- hallo()
- {
- an den Beginn und die Zeilen
- }
- hallo
- an das Ende dieses Scripts, also so:
-
- hallo()
- {
- echo Hallo Anwender!
- echo Der freie Speicherplatz beträgt `mem` Bytes.
- echo Auf Platte C: sind `df -f c:` Bytes frei.
- }
- hallo
-
- , so wird beim Start des Scripts die Shellfunktion hallo installiert,
- und bei jedem weiteren Aufruf von hallo wird nicht das Script, sondern
- die Funktion aufgerufen. Mit dem Kommando
-
- unset hallo
-
- kann man die Funktion wieder aus dem Speicher entfernen.
-
- Die Shellfunktionen machen übrigens eine alias-Funktion völlig
- überflüssig, da sie auch benutzt werden können, um interne Kommandos
- umzudefinieren: Wer anstelle von ls lieber ls -C hat, gibt einfach ein
-
- ls()
- {
- !ls -C $*
- }
-
- Das Ausrufezeichen verhindert, daß sich die ls-Funktion selber aufruft.
- !ls ist immer das interne Kommando ls. Wer irgendwann das normale ls
- benutzen will, kann das tun, indem er es als !ls aufruft.
-
- Ebenso helfen Shellfunktionen, Tippfehler zu vermeiden; wer ständig dor
- oder dior statt dir tippt, versuche
-
- dior()
- {
- dir $*
- }
-
- (Wer sich wundert, daß die Okami-Shell trotzdem ein alias-Kommando hat:
- das dient nur dazu, das Anlegen dieser Mini-Funktionen einfacher zu
- gestalten und um Shellscripts anderer Shells ausführen zu können. Man
- kann also ebenso schreiben:
- alias ls !ls -C
- und
- alias dior dir
- .)
-
- Mein Unix-Tippfehler-Script enthält mehrere Dutzend Schreibweisen der
- häufig benutzten Kommandos wie dir, grep und der Make-Aufrufe xmake,
- qmake und remake.
-
- Besondere Funktionen haben die vordefinierten (aber vom Anwender
- vollständig umdefinierbaren) Shellfunktionen gemexec und screensave, die
- in den folgenden Abschnitten beschrieben werden.
-
- ---------------------------------------------------------------------------
-
-
-
- DIE GEMEXEC-FUNKTION
-
- Mit der kann man wirklich einiges machen, denn sie gibt dem Anwender
- die Möglichkeit, das Verhalten der Shell beim Start von GEM-Programmen
- frei zu programmieren. Dabei stehen ihm alle die nicht zu
- unterschätzenden Funktionen der Shell zur Verfügung.
-
- Die folgende gemexec-Funktion kann benutzt werden, um nach dem Ende
- eines GEM-Programms den Bildschirm wieder so herzustellen, wie er vor
- dem Aufruf war.
- Dazu werden die internen Kommandos getscr und putscr sowie die
- VT52-Sequenzen zum Speichern und Wiederherstellen der Cursorposition
- benutzt. Dabei werden allerdings 32000 Bytes zum Speichern des
- Bildschirminhaltes belegt. Aus diesem Grund speichert die Funktion den
- Bildschirm nur dann, wenn die Shellvariable SAVESCR gesetzt ist. Man
- kann das Spei